import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.MessageFormat;
import java.util.Date;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JSlider;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import org.jfree.ui.RefineryUtilities;

public class Evento implements ActionListener {

	private JLabel jl_fondo;
	private JComboBox combo;
	private JSlider slider;
	private ImageIcon imagen_fondo;

	private JComboBox jcb_dias;
	private JComboBox jcb_horas_inicio;
	private JComboBox jcb_horas_fin;

	private JLabel jl_horas_fin;
	private JLabel jl_am_pm;

	private Oficina oficina;
	private EntradaClientes entrada_clientes;

	private Histograma histo;
	private JButton jb_iniciar;
	private JMenuItem jmi_iniciar;

	private JButton jb_nuevo;
	private JMenuItem jmi_nuevo;
	private JMenuItem jmi_salir;
	
	private JButton jb_detener;
	private JMenuItem jmi_detener;

	private JButton jb_imprimir;
	private JMenuItem jmi_imprimir;

	private JTable jt_tabla_reportes;
	private JTextArea jt4_texto;
	
	

	private JFrame principal;

	private JMenuItem jmi_ayuda_datos;
	private JMenuItem jmi_ayuda_ciudadanos;
	private JMenuItem jmi_ayuda_reportes;
	private JMenuItem jmi_ayuda_dias;
	private JMenuItem jmi_ayuda_botones;
	private JMenuItem jmi_quienes_somos;
	private JMenuItem jmi_version;
	
	@SuppressWarnings("unused")
	
	
	private JMenu jm_reportes;
	
	private JMenu jm_diagrama_sistema;
	private JMenu jm_diagrama_caja;
	private JMenu jm_diagrama__TA;
	
	private JMenu jm_diagrama__Telefono;
	private JMenu jm_diagrama__Apostador;
	
	private JMenuItem jmi_torta_telefono;
	private JMenuItem jmi_barra_telefono;
	private JMenuItem jmi_torta_apostador;
	private JMenuItem jmi_barra_apostador;
	
	
	private JMenuItem jmi_torta_sistema;
	private JMenuItem jmi_barra_sistema;
	
	private JMenuItem jmi_torta_caja;
	private JMenuItem jmi_barra_caja;
	
	private JMenuItem jmi_torta_TA;
	private JMenuItem jmi_barra_TA;
	
	private Object a;
	JTable jt2_tabla_reportes;
	private JTable jt3_tabla_reportes;
	private int b;
	
	
	public Evento() {
		 
	}
	
	
	
	public void establecer(JLabel jl_fondo, JLabel jl_horas_fin,
			JLabel jl_am_pm, JButton jb_iniciar, JMenuItem jmi_iniciar,
			JTable jt_tabla_reportes, JComboBox jcb_dias,
			JComboBox jcb_horas_inicio, JComboBox jcb_horas_fin,
			JButton jb_imprimir, JMenuItem jmi_imprimir , JFrame principal, JButton jb_nuevo,
			JMenuItem jmi_nuevo, JMenuItem jmi_salir, JButton jb_detener,
			JMenuItem jmi_detener,   JSlider slider,JMenu jm_diagrama_sistema,
			JMenu jm_diagrama_caja,JMenu jm_diagrama_EC,JMenuItem jmi_torta_sistema,
			JMenuItem jmi_barra_sistema,JMenuItem jmi_torta_caja,JMenuItem jmi_barra_caja,
			JMenuItem jmi_torta_TA,JMenuItem jmi_barra_TA, JComboBox combo, ImageIcon imagen_fondo,JTable jt2_tabla_reportes, JTable jt3_tabla_reportes, 
			JMenuItem jmi_ayuda_ciudadanos, JMenuItem jmi_ayuda_reportes, JMenuItem 
			jmi_ayuda_botones, JMenuItem jmi_quienes_somos, JMenuItem jmi_version, JTextArea jt4_texto,
			JMenu jm_diagrama__Telefono, JMenu jm_diagrama__Apostador,JMenuItem jmi_torta_telefono, JMenuItem jmi_barra_telefono, JMenuItem jmi_torta_apostador,JMenuItem jmi_barra_apostador)

	{
		 a=combo.getSelectedItem();
		 int b=Integer.parseInt((String) a) ;
		
		this.jl_fondo = jl_fondo;
		this.jt2_tabla_reportes=jt2_tabla_reportes;
		this.jt3_tabla_reportes=jt3_tabla_reportes;
		this.imagen_fondo=imagen_fondo;
		this.jt4_texto=jt4_texto;
		 this.combo=combo;
		 this.jt_tabla_reportes = jt_tabla_reportes;

		this.jl_am_pm = jl_am_pm;
		this.jl_horas_fin = jl_horas_fin;
		histo = new Histograma();
	
		entrada_clientes = new EntradaClientes(jl_fondo, histo , jt_tabla_reportes, slider,combo,jt2_tabla_reportes,jt3_tabla_reportes, jt4_texto );
		oficina = new Oficina(jl_fondo, histo, entrada_clientes, jt_tabla_reportes,slider);
		this.jb_iniciar = jb_iniciar;
		this.jmi_iniciar = jmi_iniciar;

		this.jb_nuevo = jb_nuevo;
		this.jmi_nuevo = jmi_nuevo;
		this.jmi_salir = jmi_salir;
		
		this.jb_detener = jb_detener;
		this.jmi_detener = jmi_detener;
		
		
		
		this.jcb_dias = jcb_dias;
		this.jcb_horas_inicio = jcb_horas_inicio;
		this.jcb_horas_fin = jcb_horas_fin;

		this.jb_imprimir = jb_imprimir;
		this.jmi_imprimir = jmi_imprimir;

		//this.jmi_ayuda_datos = jmi_ayuda_datos;
		this.jmi_ayuda_ciudadanos = jmi_ayuda_ciudadanos;
		this.jmi_ayuda_reportes = jmi_ayuda_reportes;
		//this.jmi_ayuda_dias = jmi_ayuda_dias;
		this.jmi_ayuda_botones = jmi_ayuda_botones;
		this.jmi_quienes_somos = jmi_quienes_somos;
		this.jmi_version = jmi_version;
		
		this.slider = slider;
		
		
		this.jmi_torta_sistema=jmi_torta_sistema;
		this.jmi_barra_sistema=jmi_barra_sistema;
		
		this.jmi_torta_caja=jmi_torta_caja;
		this.jmi_barra_caja=jmi_barra_caja;
		
		this.jmi_torta_TA=jmi_torta_TA;
		this.jmi_barra_TA=jmi_barra_TA;
		
		this.jmi_torta_telefono=jmi_torta_telefono;
		this.jmi_barra_telefono=jmi_barra_telefono;
		
		this.jmi_torta_apostador=jmi_torta_apostador;
		this.jmi_barra_apostador=jmi_barra_apostador;
		
		
		jmi_torta_telefono.addActionListener(this);
		jmi_barra_telefono.addActionListener(this);
		jmi_torta_apostador.addActionListener(this);
		jmi_barra_apostador.addActionListener(this);
		
		jmi_torta_sistema.addActionListener(this);
		jmi_torta_caja.addActionListener(this);
		jmi_torta_TA.addActionListener(this);
		
		jmi_barra_sistema.addActionListener(this);
		jmi_barra_caja.addActionListener(this);
		jmi_barra_TA.addActionListener(this);
		
		
		//jmi_ayuda_datos.addActionListener(this);
		jmi_ayuda_ciudadanos.addActionListener(this);
		jmi_ayuda_reportes.addActionListener(this);
		//jmi_ayuda_dias.addActionListener(this);
		jmi_ayuda_botones.addActionListener(this);
		jmi_quienes_somos.addActionListener(this);
		jmi_version.addActionListener(this);
		
		
		this.principal = principal;

		jb_iniciar.addActionListener(this);
		jmi_iniciar.addActionListener(this);

		jb_nuevo.addActionListener(this);
		jmi_nuevo.addActionListener(this);

		jmi_salir.addActionListener(this);

		jb_detener.addActionListener(this);
		jmi_nuevo.addActionListener(this);

		jb_imprimir.addActionListener(this);
		jmi_imprimir.addActionListener(this);
		
		

	}

	@SuppressWarnings("deprecation")
	public void actionPerformed(ActionEvent e) {
		if (e.getSource().equals(jb_iniciar)
				|| e.getSource().equals(jmi_iniciar)) {

			if (jcb_horas_fin.getSelectedIndex() < jcb_horas_inicio
					.getSelectedIndex()) {
				JFrame frame = new JFrame();
				JOptionPane
						.showMessageDialog(
								frame,
								"Se ocaciono un error al obtener\nlas horas de inicio y fin revisar\n"
										+ "   las entradas de hora inicio y fin\n se debe proceder a aumentar la hora\n"
										+ "  fin a un numero superior a la hora inicio",
								"Error de hora....", JOptionPane.ERROR_MESSAGE);
			} else {

				 a=combo.getSelectedItem();
				 int b=Integer.parseInt((String) a) ;
				 
				 
				switch(b){
				
					case 1:
						imagen_fondo = new ImageIcon("imagenes/fondos/fondo1.gif");
						jl_fondo.setIcon(imagen_fondo);
					break;
					case 2:
						imagen_fondo = new ImageIcon("imagenes/fondo 2.gif");
						jl_fondo.setIcon(imagen_fondo);
					break;
				
					case 3:
						imagen_fondo = new ImageIcon("imagenes/fondo 3.gif");
						jl_fondo.setIcon(imagen_fondo);
					break;
					
					case 4:
						imagen_fondo = new ImageIcon("imagenes/fondo 4.gif");
						jl_fondo.setIcon(imagen_fondo);
					break;
					case 5:
						imagen_fondo = new ImageIcon("imagenes/fondo 5.gif");
						jl_fondo.setIcon(imagen_fondo);
				}
				
				
				
				Object x = jcb_horas_inicio.getSelectedItem();

				jt_tabla_reportes.setValueAt(x, 4, 1);
				jt_tabla_reportes.setValueAt(x, 11, 1);
				jt_tabla_reportes.setValueAt(x, 18, 1);

				Object y = jcb_dias.getSelectedItem();

				jt_tabla_reportes.setValueAt(y, 3, 1);
				jt_tabla_reportes.setValueAt(y, 10, 1);
				jt_tabla_reportes.setValueAt(y, 17, 1);

				Object z = new Date().toGMTString();

				jt_tabla_reportes.setValueAt(z, 5, 1);
				jt_tabla_reportes.setValueAt(z, 12, 1);
				jt_tabla_reportes.setValueAt(z, 19, 1);

				int nuevoValor = 0;
				if (jcb_horas_inicio.getSelectedIndex() <= 3)
					jl_horas_fin.setText("AM      Hora Fin:");
				else
					jl_horas_fin.setText("PM      Hora Fin:");

				if (jcb_horas_fin.getSelectedIndex() < 3 && nuevoValor < 3)
					jl_am_pm.setText(" AM");
				else if (jcb_horas_fin.getSelectedIndex() >= 3
						|| nuevoValor > 3)
					jl_am_pm.setText(" PM");

				oficina.encontrarPosicion(jcb_dias.getSelectedIndex(),
						jcb_horas_inicio.getSelectedIndex());
				entrada_clientes.llenarClientes(jcb_horas_inicio
						.getSelectedIndex(), jcb_horas_fin.getSelectedIndex());

			}
		}
		if ((e.getSource().equals(jb_nuevo))
				|| (e.getSource().equals(jmi_nuevo))) {
			principal.setVisible(false);
			principal.repaint();
			Simulacion aux = new Simulacion();
			aux.setVisible(true);
		}

		if((e.getSource().equals(jb_detener))||(e.getSource().equals(jmi_detener)))
		{
			entrada_clientes.suspend();
		}

		if (e.getSource().equals(jb_imprimir) || e.getSource().equals(jmi_imprimir) ) {

			MessageFormat titulo = new MessageFormat(
					"Pagina {0,number,integer}");
			try {
				jt_tabla_reportes.print(JTable.PrintMode.FIT_WIDTH, titulo,
						null);
			} catch (java.awt.print.PrinterException exx) {
				System.err.format("Cannot print %s%n", exx.getMessage());
			}

		}
		
		if (e.getSource().equals(jmi_torta_sistema)) {
			 Torta_de_Sistema_3D demo = new Torta_de_Sistema_3D("REPORTE DE SISTEMAS",jt_tabla_reportes);
		     demo.pack();
		     demo.setResizable(false);
		     RefineryUtilities.centerFrameOnScreen(demo);
		     demo.setVisible(true);
		}
		if (e.getSource().equals(jmi_barra_sistema)) {
			 @SuppressWarnings("unused")
			barra_de_sistema ba=new barra_de_sistema(jt_tabla_reportes);
		   
		}
		if (e.getSource().equals(jmi_torta_caja)) {
			 Torta_de_Caja_3D demo = new Torta_de_Caja_3D("REPORTE DE CAJA",jt_tabla_reportes);
		     demo.pack();
		     demo.setResizable(false);
		     RefineryUtilities.centerFrameOnScreen(demo);
		     demo.setVisible(true);
		}
		if (e.getSource().equals(jmi_barra_caja)) {
			 @SuppressWarnings("unused")
			barra_de_caja b=new barra_de_caja(jt_tabla_reportes);
		   
		}
		if (e.getSource().equals(jmi_torta_TA)) {
			 Torta_de_Tomador_Apuestas_3D demo = new Torta_de_Tomador_Apuestas_3D("REPORTE TOMADOR DE APUESTAS",jt_tabla_reportes);
		     demo.pack();
		     demo.setResizable(false);
		     RefineryUtilities.centerFrameOnScreen(demo);
		     demo.setVisible(true);
		}
		if (e.getSource().equals(jmi_barra_TA)) {
			 @SuppressWarnings("unused")
			barra_de_TA b=new barra_de_TA(jt_tabla_reportes);
		   
		}
		
		if (e.getSource().equals(jmi_torta_telefono)) {
			 Torta_Telefono demo = new Torta_Telefono("REPORTE TELEFONO",jt_tabla_reportes);
		     demo.pack();
		     demo.setResizable(false);
		     RefineryUtilities.centerFrameOnScreen(demo);
		     demo.setVisible(true);
		}
		if (e.getSource().equals(jmi_barra_telefono)) {
			 @SuppressWarnings("unused")
			Barra_Telefono b=new Barra_Telefono(jt_tabla_reportes);
		   
		}
		
		if (e.getSource().equals(jmi_torta_apostador)) {
			 Torta_Apostador demo = new Torta_Apostador("REPORTE DE APUESTAS",jt_tabla_reportes);
		     demo.pack();
		     demo.setResizable(false);
		     RefineryUtilities.centerFrameOnScreen(demo);
		     demo.setVisible(true);
		}
		if (e.getSource().equals(jmi_barra_apostador)) {
			 @SuppressWarnings("unused")
			Barra_Apostador b=new Barra_Apostador(jt_tabla_reportes);
		   
		}
		
		if (e.getSource().equals(jmi_salir)) {
			System.exit(0);
		}

		/*if (e.getSource().equals(jmi_ayuda_datos)) {
			JOptionPane
					.showMessageDialog(
							null,
							"La forma correcta de ingresar los datos son: \nEscoger de la lista de horas establecidas \n Tanto para la HoraInicio como para la HoraFin");
		}*/
		if (e.getSource().equals(jmi_ayuda_ciudadanos)) {
			JOptionPane
					.showMessageDialog(
							null,
							"Indique con que casos empezar \n inicie la simulacion con el boton iniciar");
		}
		if (e.getSource().equals(jmi_ayuda_reportes)) {
			JOptionPane
					.showMessageDialog(
							null,
							"Los datos que esta Simulacion maneja\nse encuentran en las tablas de su derecha\nlos reportes son tanto de la \nCaja como de Tomador de Apuestas");
		}
	/*	if (e.getSource().equals(jmi_ayuda_dias)) {
			JOptionPane
					.showMessageDialog(
							null,
							"La seleccion del dia en la que quiere hacer la\nsimulacion es de la siguiente forma\nescogemos un dia especifico de la lista \n"
									+ "que esta a su dispocicion en la parte central de su pantalla");
		}*/
		if (e.getSource().equals(jmi_ayuda_botones)) {
			JOptionPane
					.showMessageDialog(
							null,
							"El uso de los botones son de conocimineto general\nPero daremos una breve explicacion\nInicio => Este boton inicia la simulacion\n"
									+ "Detener => este boton detiene la simulacion\nNuevo => Este boton habre una nueva ventana");
		}
		if (e.getSource().equals(jmi_quienes_somos)) {
			JOptionPane
					.showMessageDialog(null,
							"Somos estudiantes de la carrera de ING. SISTEMAS\n");
		}
		if (e.getSource().equals(jmi_version)) {
			JOptionPane
					.showMessageDialog(
							null,
							"SIMULACION DE APUESTAS BASADAS EN COLAS\n"
									+ "\nEste proyecto simula una Empresa de Apuestas\nla version de este proyecto es:\n"
									+ "\n    Simulacion de Apuestas Basadas en Colas  version  Beta ");
		}
	}

	

	public JLabel getJl_fondo() {
		return jl_fondo;
	}

	public void setJl_fondo(JLabel jl_fondo) {
		this.jl_fondo = jl_fondo;
	}

}